// 删除数组中指定的(传入)的某个元素

Array.prototype.remove = function (val) {
    var index = this.indexOf(val) //通过indexOf查询到传入的元素在数组中的索引
    if (index > -1) {
        this.splice(index, 1) //splice删除从index开始,删除一个
    }
}

//eg
var arr = [1, 2, 3, 4, 5, 6, "a", "b"]
arr.remove("a")
console.log(arr) //[1, 2, 3, 4, 5, 6, "b"]

//深克隆

function deepClone(val) {
    //进来先判断val是数组还是对象
    let cloneResult = Array.isArray(val) ? [] : {}
    //然后遍历val
    for (key in val) {
        //判断val中是否含有key属性
        if (val.hasOwnProperty(key)) {
            //有key就进一步判断这个key是否又是一个对象
            if (typeof val[key] === "object") {
                //是对象就递归一次
                cloneResult[key] = deepClone(val[key])
            } else {
                cloneResult[key] = val[key]
            }
        }
    }
    return cloneResult
}

//eg
var arr1 = [1,2,3,[4,5]]
var arr2 = deepClone(arr1)
arr2[3][1]="修改"
console.log(arr1) //[ 1, 2, 3, [ 4, 5 ] ]
console.log(arr2) //[ 1, 2, 3, [ 4, '修改' ] ]